package com.powernode.mybatis.mapper;

import com.powernode.mybatis.pojo.Student;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;

public interface StudentMapper {
    /**
     * param注解
     * mybatis框架会自动创建一个map集合，并且map集合是以这样的方式存储参数的
     *          map.put("name",name)
     *          map.put("sex",sex)
     * @param name
     * @param sex
     * @return
     */
    List<Student> selectByNameAndSex2(@Param("name") String name,@Param("sex") Character sex);

    /**
     * 根据name和sex查询student信息
     * 如果是多个参数的话，mybatis框架是怎么做的？
     *      mybatis框架会自动创建一个map集合，并且map集合是以这样的方式存储参数的
     *          map.put("arg0",name)
     *          map.put("arg1",sex)
     *          map.put("param1",name)
     *          map.put("param2",sex)
     * @param name
     * @param sex
     * @return
     */
    List<Student> selectByNameAndSex(String name,Character sex);

    /**
     * 通过学生信息保存pojo参数，student是单个参数，但不是简单类型
     * @param student
     * @return
     */
    int insertStudentByPojo(Student student);

    /**
     * 通过map参数保存学生信息，以下是单个参数，但是参数的类型是不是简单参数
     * @param map
     * @return
     */
    int insertStudentByMap(Map<String, Object> map);

    /**
     * 当接口中方法的参数只有一个，并且参数的数据类型都是简单类型
     * 根据id、name、birth、sex查询
     */
    List<Student> selectById(Long id);
    List<Student> selectByName(String name);
    List<Student> selectByBirth(Date birth);
    List<Student> selectBySex(Character sex);
}
